Skip to content

feat: add one-click copy to clipboard for remote connection URL#360

Merged
PinJinx merged 15 commits into
AOSSIE-Org:mainfrom
Dotify71:feat/copy-to-clipboard
Jul 14, 2026
Merged

feat: add one-click copy to clipboard for remote connection URL#360
PinJinx merged 15 commits into
AOSSIE-Org:mainfrom
Dotify71:feat/copy-to-clipboard

Conversation

@Dotify71

@Dotify71 Dotify71 commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Fixes #359

Description

Currently, users who cannot scan the QR code have to manually highlight and copy the long IP address + auth token URL on their desktop to share it to their device. This is tedious on some screens or setups where dragging to highlight is difficult.

Solution

Added a "Copy Link" button beneath the URL on the settings page with a brief "Copied! ✅" visual confirmation, greatly improving setup UX.

  • Implemented using navigator.clipboard.writeText
  • Added temporary state feedback matching existing DaisyUI/Tailwind styles.

Summary by CodeRabbit

  • New Features
    • Added a Copy Link button in the Mobile Connect area to simplify sharing the connect URL.
    • Displays a temporary Copied confirmation after the link is successfully copied.
  • UI Improvements
    • Updated the Mobile Connect card layout to support the new copy action and feedback states.
    • Added user-facing handling for copy failures with an error message.
  • Localization
    • Added new localized strings for the Copy Link, Copied, and Copy failed messages.

@coderabbitai

coderabbitai Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds a Copy Link button to the Settings page connection URL, with clipboard write support, a fallback copy path, and localized success or error feedback.

Changes

Copy Link Button for Share URL

Layer / File(s) Summary
Copy state and fallback helper
src/routes/settings.tsx
Adds localized copy-feedback state and a textarea-based fallback helper for copying text when the async clipboard API is unavailable.
Connect Mobile copy action
src/routes/settings.tsx, src/utils/i18n.ts
Refactors the Connect Mobile URL area into a vertical layout, adds the Copy Link button, wires clipboard success/error handling with timed copied-state reset, and adds the new settings translation strings.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant SettingsPage
  participant Clipboard as navigator.clipboard

  User->>SettingsPage: click Copy Link
  SettingsPage->>Clipboard: writeText(shareUrl)
  alt success
    Clipboard-->>SettingsPage: resolved
    SettingsPage->>SettingsPage: set copied = true
    SettingsPage->>SettingsPage: reset after 2 seconds
  else failure
    Clipboard-->>SettingsPage: rejected
    SettingsPage->>SettingsPage: set copyError
  end
Loading

Suggested labels: Typescript Lang

Poem

A bunny clicked with joy today,
And sent the link on its quick way.
"Copied!" flashed, then softly faded,
The long URL no longer evaded.
🐰📋✨

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change: adding a copy-to-clipboard action for the remote connection URL.
Description check ✅ Passed The description includes the issue reference, problem statement, and solution summary, with only noncritical template sections omitted.
Linked Issues check ✅ Passed The PR satisfies #359 by adding a Copy Link button, clipboard copy behavior, and brief success feedback on the settings page.
Out of Scope Changes check ✅ Passed The changes stay focused on the copy-to-clipboard feature and supporting i18n/error handling, with no clear unrelated additions.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/routes/settings.tsx`:
- Line 392: The button labels "Copied! ✅" and "Copy Link" on line 392 in
src/routes/settings.tsx are hardcoded user-facing strings that should be
externalized to i18n resources for consistency and translatability. Move these
string literals into the appropriate i18n/localization resource file with
meaningful keys (e.g., copyLinkSuccess and copyLinkButton), then replace the
hardcoded strings in the JSX with references to those i18n keys using the
standard i18n translation function from your project (typically useTranslation
hook or similar), ensuring the ternary expression now references the translated
strings instead of inline literals.
- Around line 386-390: The onClick handler calls
navigator.clipboard.writeText(shareUrl) which returns a Promise, but this
Promise is not awaited and the success state setCopied(true) is set immediately
regardless of the clipboard operation's outcome. To fix this, convert the
onClick handler to an async function and await the clipboard.writeText() call
before setting the copied state, ensuring setCopied(true) only executes after
the clipboard write succeeds. Additionally, add error handling to gracefully
handle cases where the clipboard operation fails due to permission denial or
other issues.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 5c258009-5ca2-4339-8cc3-08fc4f4a33e2

📥 Commits

Reviewing files that changed from the base of the PR and between 7e1c5ab and 190cd1b.

📒 Files selected for processing (1)
  • src/routes/settings.tsx

Comment thread src/routes/settings.tsx Outdated
Comment thread src/routes/settings.tsx Outdated
@Dotify71

Copy link
Copy Markdown
Contributor Author

@coderabbitai I have updated the code to await the navigator.clipboard.writeText Promise and added proper error handling inside a try/catch block as suggested!

Regarding the i18n suggestion: The project currently does not use any i18n localization framework (all other strings in settings.tsx and the rest of the application are hardcoded English strings). I am keeping the "Copy Link" string hardcoded for now to match the existing project patterns.

@coderabbitai

coderabbitai Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

@Dotify71 Thanks for the updates!

  • Async error handling – Great, adding await and wrapping in a try/catch is the right approach; it ensures clipboard failures (e.g., permission denied, insecure context) are caught gracefully rather than producing unhandled promise rejections. ✅
  • i18n – Understood, keeping "Copy Link" hardcoded is perfectly consistent with the rest of the codebase. That suggestion is withdrawn.

The implementation looks solid. Thanks for the thorough explanation!

🐇 ₍^·ᴥ·^₎


✏️ Learnings added
Learnt from: Dotify71
URL: https://github.com/AOSSIE-Org/Rein/pull/360

Timestamp: 2026-06-14T17:59:31.436Z
Learning: In the AOSSIE-Org/Rein project, there is no i18n/localization framework in use. All UI strings throughout the application (including `src/routes/settings.tsx`) are hardcoded English strings. Do not flag hardcoded strings as an i18n concern in this project.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


If you found this review helpful, would you consider giving us a shout-out on X?

Thank you for using CodeRabbit!

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown

⚠️ This PR has merge conflicts.

Please resolve the merge conflicts before review.

Your PR will only be reviewed by a maintainer after all conflicts have been resolved.

📺 Watch this video to understand why conflicts occur and how to resolve them:
https://www.youtube.com/watch?v=Sqsz1-o7nXk

@PinJinx

PinJinx commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Thanks for the PR. I’ve gone through it. Could you externalize the string into the file as CodeRabbit suggested? Also, I think it would be better to remove the emoji from the copied string.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/routes/settings.tsx (1)

368-382: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Guard clipboard copy on non-secure LAN sessions
navigator.clipboard is unavailable in insecure HTTP contexts, so this button will fail on the LAN/remote setup the page is built for. Add a secure-context check with a fallback copy path, and show a visible error if copying still fails.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/routes/settings.tsx` around lines 368 - 382, The copyLink button in
settings.tsx currently assumes navigator.clipboard is always available, which
breaks in insecure HTTP/LAN sessions. Update the onClick handler in the settings
share URL button to first check for a secure context before calling
navigator.clipboard.writeText, and add a fallback copy path for unsupported
cases. If both the primary and fallback copy attempts fail, surface a visible
user-facing error instead of only logging in the catch block.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@src/routes/settings.tsx`:
- Around line 368-382: The copyLink button in settings.tsx currently assumes
navigator.clipboard is always available, which breaks in insecure HTTP/LAN
sessions. Update the onClick handler in the settings share URL button to first
check for a secure context before calling navigator.clipboard.writeText, and add
a fallback copy path for unsupported cases. If both the primary and fallback
copy attempts fail, surface a visible user-facing error instead of only logging
in the catch block.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: be24b280-e8ec-4b73-a0be-ad7b2e50fed2

📥 Commits

Reviewing files that changed from the base of the PR and between 130beb1 and 864f45f.

📒 Files selected for processing (2)
  • src/routes/settings.tsx
  • src/utils/i18n.ts

@Dotify71

Dotify71 commented Jul 3, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai can you give a review

@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
fd settings.tsx
echo "---"
fd i18n.ts
echo "---"
cat -n src/routes/settings.tsx | sed -n '1,200p'
echo "---i18n---"
cat -n src/utils/i18n.ts | sed -n '1,80p'

Length of output: 9298


🏁 Script executed:

#!/bin/bash
sed -n '260,340p' src/routes/settings.tsx

Length of output: 2644


🏁 Script executed:

#!/bin/bash
grep -n "shareUrl\|copyLink\|copied\|Copy Link\|clipboard\|copyWithFallback\|copyError" src/routes/settings.tsx

Length of output: 1024


🏁 Script executed:

#!/bin/bash
sed -n '370,420p' src/routes/settings.tsx

Length of output: 1804


@Dotify71 Reviewed the latest changes — both requests from PinJinx have been addressed nicely:

  • i18n externalization: The "Copy Link" and "Copied" strings are now sourced from src/utils/i18n.ts via t("settings", "copyLink") and t("settings", "copied") (Line 411 in src/routes/settings.tsx), instead of being hardcoded inline.
  • Emoji removed: The "copied" string in src/utils/i18n.ts is now "Copied!" with no emoji.

Additionally, I noticed the implementation now also includes a nice touch beyond what was requested:

  • A secure-context check (window.isSecureContext && navigator.clipboard?.writeText) with a copyWithFallback using document.execCommand("copy") for non-secure/older browser contexts.
  • Failure is surfaced to the user via a copyError message (t("settings", "copyFailed")), not just logged to console.

This looks solid overall. Nice work incorporating the feedback!

🐇 ₍^•ᴥ•^₎


✏️ Learnings added
Learnt from: Dotify71
URL: https://github.com/AOSSIE-Org/Rein/pull/360

Timestamp: 2026-07-03T21:46:21.572Z
Learning: In the AOSSIE-Org/Rein project, `src/utils/i18n.ts` now contains an `en.settings` category with `copyLink`, `copied`, and `copyFailed` keys used in `src/routes/settings.tsx` for the "Copy Link" button feature. Despite an earlier learning stating the project has no i18n framework, this specific feature (copy-to-clipboard for the remote connection URL) was updated to use the lightweight `t(category, key)` i18n helper instead of hardcoded strings, per reviewer PinJinx's request.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@Dotify71

Dotify71 commented Jul 3, 2026

Copy link
Copy Markdown
Contributor Author

@PinJinx i have done some changes can you review this pr now

@PinJinx

PinJinx commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

@Dotify71 Just fix the formatting error and ping me, I’ll merge the PR. Thanks for your contribution!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/routes/settings.tsx`:
- Around line 156-171: Guard the copy fallback cleanup in copyWithFallback so
the temporary textarea is always removed even if document.execCommand("copy")
throws. Wrap the execCommand call and the removal logic in a try/finally block,
and keep the cleanup tied to the copyWithFallback helper so the DOM node is
deleted on both success and failure.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 1bb172c2-a521-4f56-8268-4dfc9769271f

📥 Commits

Reviewing files that changed from the base of the PR and between 864f45f and d497e9f.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (2)
  • src/routes/settings.tsx
  • src/utils/i18n.ts

Comment thread src/routes/settings.tsx Outdated
@Dotify71

Dotify71 commented Jul 6, 2026

Copy link
Copy Markdown
Contributor Author

@PinJinx i think everything is set now

@Dotify71

Dotify71 commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

@PinJinx can you re-run the CI/CD

@PinJinx

PinJinx commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

@Dotify71 Why did you edit the workflow file? Could you explain the reasoning behind that change? I’d suggest keeping the PR limited to only the required changes.

@Dotify71

Dotify71 commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

Hey @PinJinx! I was initially seeing some flaky behavior with the Windows CI build locally and in the checks (npm ci was failing on Windows due to optional dependencies/package-lock issues), so I tried tweaking the workflow to get the green checkmark.

However, I completely agree with you, it's best to keep this PR strictly scoped to the 'copy to clipboard' feature and not mix in CI changes. I have just reverted the workflow file changes back to main. Thanks for the review and let me know if there's anything else!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
src/routes/settings.tsx (2)

156-173: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Move copyWithFallback outside the component.

This function takes only text as a parameter and uses no component state or props, so defining it inside SettingsPage recreates it on every render. It also blocks React Compiler auto-memoization of the entire component — the static analysis hint flags the try/finally without a catch clause at line 167 as an unsupported statement for the compiler's HIR lowering. Moving it to module scope fixes both issues.

♻️ Proposed refactor
+const copyWithFallback = (text: string) => {
+	const textArea = document.createElement("textarea")
+	textArea.value = text
+	textArea.setAttribute("readonly", "")
+	textArea.style.position = "absolute"
+	textArea.style.left = "-9999px"
+
+	document.body.appendChild(textArea)
+	textArea.select()
+	textArea.setSelectionRange(0, text.length)
+
+	try {
+		return document.execCommand("copy")
+	} finally {
+		document.body.removeChild(textArea)
+	}
+}
+
 function SettingsPage() {
 	const [ip, setIp] = useState("")
 	const [copied, setCopied] = useState(false)
 	const [copyError, setCopyError] = useState("")
-	const [frontendPort, setFrontendPort] = useState("")
+	const [frontendPort, setFrontendPort] = useState("")

Then remove the original definition at lines 156–173.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/routes/settings.tsx` around lines 156 - 173, Move copyWithFallback out of
SettingsPage into module scope so it is not recreated on every render and no
longer blocks React Compiler auto-memoization. Keep the function behavior the
same, but define it alongside the other top-level helpers in settings.tsx and
remove the inline definition inside the component; use the existing
copyWithFallback symbol wherever the component currently calls it.

Source: Linters/SAST tools


404-405: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Clear the previous copy timeout before scheduling a new one.

If the user clicks "Copy Link" twice within 2 seconds, the first setTimeout still fires and prematurely resets copied to false, causing the "Copied!" label to flicker off even though the second copy just succeeded. The timer is also not cleared on unmount.

🐛 Proposed fix

Add a ref to track the timeout and clear it before scheduling:

+	const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)
+
 	// ... inside the onClick handler, after setCopied(true):
-	setCopied(true)
-	setTimeout(() => setCopied(false), 2000)
+	setCopied(true)
+	if (copyTimerRef.current) clearTimeout(copyTimerRef.current)
+	copyTimerRef.current = setTimeout(() => {
+		setCopied(false)
+		copyTimerRef.current = null
+	}, 2000)

And clear it in the catch block:

 		} catch (err) {
 			console.error("Failed to copy URL:", err)
+			if (copyTimerRef.current) {
+				clearTimeout(copyTimerRef.current)
+				copyTimerRef.current = null
+			}
 			setCopied(false)
 			setCopyError(t("settings", "copyFailed"))
 		}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/routes/settings.tsx` around lines 404 - 405, The copy feedback timer in
the settings copy handler is not being managed, so repeated clicks can let an
older timeout reset copied too early and it may also leak on unmount. Update the
Copy Link logic in settings.tsx to store the timeout in a ref, clear any
existing timeout before scheduling a new one after setCopied(true), and clear
the pending timeout in the cleanup/unmount path and any error handling path
related to the copy action.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@src/routes/settings.tsx`:
- Around line 156-173: Move copyWithFallback out of SettingsPage into module
scope so it is not recreated on every render and no longer blocks React Compiler
auto-memoization. Keep the function behavior the same, but define it alongside
the other top-level helpers in settings.tsx and remove the inline definition
inside the component; use the existing copyWithFallback symbol wherever the
component currently calls it.
- Around line 404-405: The copy feedback timer in the settings copy handler is
not being managed, so repeated clicks can let an older timeout reset copied too
early and it may also leak on unmount. Update the Copy Link logic in
settings.tsx to store the timeout in a ref, clear any existing timeout before
scheduling a new one after setCopied(true), and clear the pending timeout in the
cleanup/unmount path and any error handling path related to the copy action.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 97880ea1-322c-4364-ae3e-e7ab9267e891

📥 Commits

Reviewing files that changed from the base of the PR and between d497e9f and e4c9fbf.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (1)
  • src/routes/settings.tsx

@Dotify71

Dotify71 commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai can you give a review

@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
git log --oneline -10
echo "---"
git diff origin/main -- .github/workflows | head -50
echo "---"
cat -n src/routes/settings.tsx | sed -n '1,20p'
echo "---"
sed -n '380,430p' src/routes/settings.tsx

Length of output: 3567


🏁 Script executed:

#!/bin/bash
sed -n '20,40p' src/routes/settings.tsx
echo "---"
sed -n '430,450p' src/routes/settings.tsx
echo "---i18n---"
grep -n "settings" -A5 src/utils/i18n.ts | head -20
echo "---package-lock diff---"
git diff origin/main -- package-lock.json | head -30

Length of output: 2558


@Dotify71 Reviewed the latest changes — everything looks good here. ✅

  • CI workflow revert confirmed: .github/workflows now matches main exactly (no diff), so the scope is back to the copy-to-clipboard feature only.
  • Formatting fix: Biome formatting commit (d497e9f) is in place, and the code follows consistent style.
  • i18n + emoji: src/utils/i18n.ts has settings.copyLink, settings.copied ("Copied!", no emoji), and settings.copyFailed, all wired up correctly in src/routes/settings.tsx.
  • Nice refactor in the latest commit (94e5b03): moving copyWithFallback to module scope and using a copyTimerRef (useRef) with a cleanup useEffect for the "Copied!" timeout is a solid improvement — it avoids stale closures and cleans up the timer on unmount.

One small FYI (not blocking): package-lock.json still carries some unrelated dependency additions (dbus-next, eventsource, node-datachannel, @rolldown/plugin-babel) from the earlier npm v10 regeneration commit (e4c9fbf). Since you already scoped the workflow file back down, you may want to double-check whether this lockfile diff is intentional or a side effect of regenerating it locally — worth a quick look before merge to keep the diff minimal, per PinJinx's earlier request to stay focused.

Otherwise, this PR looks ready to merge. Nice work addressing all the feedback! 🐇 ₍^•ᴥ•^₎

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@Dotify71

Dotify71 commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

@PinJinx I've fixed the Windows CI failure by cleanly regenerating the package-lock.json with NPM v10 (the same version the CI runner uses). This properly pulls in the required Windows-specific optional dependencies that were getting dropped before, without us needing to touch the workflow file!

I also went ahead and addressed the recent review feedback (moved the copy fallback function out of the component scope for better memoization and fixed the copy button's timeout flicker issue).

Could you please trigger the CI/CD run again when you have a moment? Everything should be green now! Thanks!

…m optional bindings

The previous lockfile regeneration dropped optional dependencies for Windows and Linux because it was generated from scratch on macOS. This incrementally updates the lockfile from main to include the new dependencies without losing the OS-specific bindings.
@socket-security

socket-security Bot commented Jul 10, 2026

Copy link
Copy Markdown

No dependency changes detected. Learn more about Socket for GitHub.

👍 No dependency changes detected in pull request

Updated shell-quote to 1.8.4 via npm audit fix to resolve GHSA-w7jw-789q-3m8p.
@Dotify71

Copy link
Copy Markdown
Contributor Author

I've resolved the critical CVE by updating shell-quote to version 1.8.4 via npm audit fix.

For the other two warnings regarding env-runner and js-yaml being obfuscated, those appear to be false positives for standard minification (since they're pulled in by trusted upstream dependencies like nitro and electron-builder).

@SocketSecurity ignore npm/env-runner@0.1.10
@SocketSecurity ignore npm/js-yaml@4.2.0

@Dotify71

Copy link
Copy Markdown
Contributor Author

@PinJinx can you re-run

@PinJinx

PinJinx commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

@Dotify71 Just remove the package lock only keep the changed files and I am sure it will pass all the test

@Dotify71

Copy link
Copy Markdown
Contributor Author

Done as you said @PinJinx

@PinJinx

PinJinx commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

There is a formatting error that's why the ci validate is failing, fix the formatting of just that file and run npx @biomejs/biome check to make sure it works

@Dotify71

Copy link
Copy Markdown
Contributor Author

Done @PinJinx

@PinJinx PinJinx merged commit 0a1455f into AOSSIE-Org:main Jul 14, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

UX: Add "Copy to Clipboard" button for remote connection URL

2 participants